#链式调用，完全动态的__getattr__函数
class Chain(object):
    def __init__(self,path=''):
        self.__path=path
    #当调用不存在的属性时，Python解释器会试图调用__getattr__(self,'path')来尝试获得属性
    def __getattr__(self,path):
        return Chain('%s/%s'%(self.__path,path))
    #可以直接对实例进行调用
    def __call__(self,path):
        return Chain('%s/%s'%(self.__path,path))
    def __str__(self):
        return self.__path
    __repr__=__str__
print(Chain().api.server.user('画手').friends.obj.list)